#ifndef CUARTFILTER_HPP
#define CUARTFILTER_HPP

#include "common.h"
#include "uart.h"

using namespace std;
using namespace cv;

class CUartFilter {
private:
  char mRcvBuf[8];
  char mSendBuf[8];
  int mFd;

public:
  CUartFilter(/* args */);
  ~CUartFilter();
  void Open();
  void Send(const int &state);
  // void Rcv(int &mode, int &width, int &height);
};

CUartFilter::CUartFilter() {
  mFd = -1;
  memset(mSendBuf, 0, sizeof(mSendBuf));
  memset(mRcvBuf, 0, sizeof(mRcvBuf));
}
CUartFilter::~CUartFilter() {}

void CUartFilter::Open() {
  int err;
  int len;
  int err_count = 0;
  char PORT[] = "/dev/ttyAMA1";
  mFd = UART0_Open(mFd, PORT); //打开串口，返回文件描述符
  do {
    // err = UART0_Init(mFd,115200,0,8,1,'E');
    err = UART0_Init(mFd, 9600, 0, 8, 1, 'N');
    sleep(1);
    err_count++;
    if (err_count > 5)
      break;
  } while (FALSE == err || FALSE == mFd);
}

void CUartFilter::Send(const int &state) {
  memset(mSendBuf, 0, sizeof(mSendBuf));
  mSendBuf[0] = 0x55;
  mSendBuf[1] = 0xaa;
  mSendBuf[2] = (char)(state & 0x01);
  mSendBuf[6] = 0xc0;
  mSendBuf[7] = 0xf0;
  UART0_Send(mFd, mSendBuf, sizeof(mSendBuf));
  memset(mSendBuf, 0, sizeof(mSendBuf));
}

// void CUartFilter::Rcv(int &mode, int &width, int &height)
// {
//     int len = UART0_Recv(mFd, mRcvBuf,sizeof(mRcvBuf));
//     if(len==sizeof(mRcvBuf))
//     {
//         cout << mRcvBuf << endl;
//     }
//     if(len==(sizeof(mRcvBuf)/sizeof(char)))
//     {
//         if(mRcvBuf[0]==0x55 && mRcvBuf[1]==0xaa && mRcvBuf[15]==0xc0)
//         {
//             memcpy(&mode,mRcvBuf,1);
//             memcpy(&width,mRcvBuf+2,2);
//             memcpy(&height,mRcvBuf+4,2);
//         }
//     }
// }

#endif